home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / m2 / cat3src / magic / d / mtxobjec.d < prev    next >
Text File  |  1997-10-26  |  7KB  |  135 lines

  1. (*----------------------------------------------------------------------*
  2.  *                                                                      *
  3.  *  MAGICTOOLS   Modula's  All purpose  GEM  Interface  Cadre  Toolbox  *
  4.  *               ÿ         ÿ            ÿ    ÿ          ÿ               *
  5.  *----------------------------------------------------------------------*
  6.  * Version 3.30  02.02.1992     (C)90/91/92 by Peter Hellinger Software *
  7.  *----------------------------------------------------------------------*
  8.  *            Dieses Modul ist urheberrechtlich geschtzt.              *
  9.  *                                                                      *
  10.  * Die Ver”ffentlichung des Quelltextes oder Teilen daraus, sowie die   *
  11.  * Verbreitung des bersetzten, nicht gelinkten Codes in schriftlicher, *
  12.  * oder maschinenlesbarer Form, insbesondere in Zeitschriften, Mail-    *
  13.  * boxen oder anderen Medien bedarf der ausdrcklichen schriftlichen    *
  14.  * Einverst„ndnisserkl„rung des Autors.                                 *
  15.  *                                                                      *
  16.  * Die Verbreitung des Moduls als Teil eines gelinkten Programms ist    *
  17.  * fr Lizenznehmer ausdrcklich erlaubt!  Der Autor beh„lt sich das    *
  18.  * Recht vor, diese Erlaubnis jederzeit und ohne Angaben von Grnden zu *
  19.  * widerrufen.                                                          *
  20.  *----------------------------------------------------------------------*)
  21.  
  22. (*----------------------------------------------------------------------*
  23.  * ACHTUNG: _Richtige_ USerdef-Objekte (mit Behandlung durch das AES)   *
  24.  *          funktionieren derzeit nur mit MEGAMAX MODULA-2!!!           *
  25.  *----------------------------------------------------------------------*
  26.  * Dieses Modul implementiert die einfache Handhabung von Userdef- bzw. *
  27.  * Progdef-Objekten in einem Objektbaum. Die Zeichenprozeduren brauchen *
  28.  * sich um die Details (Registerbelegung, Rckgabe etc.) nicht kmmern. *
  29.  * Diese Aufgabe bernimmt ein Handler, der intern im Modul arbeitet.   *
  30.  *----------------------------------------------------------------------*)
  31.  
  32. DEFINITION MODULE mtXobjects;
  33.  
  34. FROM SYSTEM     IMPORT  ADDRESS;
  35. FROM MagicSys   IMPORT  Nil, Null, Bit0, Bit1, Bit2, Bit3, Bit4, Bit5, Bit6,
  36.                         Bit7, Bit8, Bit9, Bit10, Bit11, Bit12, Bit13, Bit14,
  37.                         Bit15, LOC, Byte, ByteSet, sWORD, sINTEGER, sCARDINAL,
  38.                         sBITSET, lINTEGER, lCARDINAL, lWORD, lBITSET;
  39. FROM MagicAES   IMPORT  PtrPARMBLK;
  40.  
  41.  
  42. TYPE DrawProc = PROCEDURE ((* para *) PtrPARMBLK): sBITSET;
  43. (* Eine Prozedur dieses Typs ist fr die Darstellung eines Objekts voll 
  44.  * eigenverantwortlich. Die Prozedur kann tun was sie will, ausser das 
  45.  * AES aufrufen. Das ist STRENG VERBOTEN, da das AES nicht reentrant ist.
  46.  * (Zuwiderhandlung wird mit Bomben nicht unter 4 Stck bestraft!), 
  47.  *
  48.  * TYPE PtrPARMBLK = POINTER TO PARMBLK;
  49.  *      PARMBLK =    RECORD
  50.  *                    pbTree:      ADDRESS;  (* Adresse des Objektbaums *)
  51.  *                    pbObj:       sINTEGER; (* Nummer des Objekts *)
  52.  *                    prPrevstate: sBITSET;  (* Status vor dem Aufruf *)
  53.  *                    prCurrstate: sBITSET;  (* Neuer Status *)
  54.  *                    pbX:         sINTEGER; (* X-Position des Objekts *)
  55.  *                    pbY:         sINTEGER; (* Y-Position des Objekts *)
  56.  *                    pbW:         sINTEGER; (* Breite des Objekts *)
  57.  *                    pbH:         sINTEGER; (* H”he des Objekts *)
  58.  *                    pbXc:        sINTEGER; (* X-Pos des Clip-Rechtecks *)
  59.  *                    pbYc:        sINTEGER; (* Y-Pos des Clip-Rechtecks *)
  60.  *                    pbWc:        sINTEGER; (* Breite des Clip-Rechtecks *)
  61.  *                    pbHc:        sINTEGER; (* H”he des Clip-Rechtecks *)
  62.  *                    pbParm:      ADDRESS;  (* Objcspec des Objekts *)
  63.  *                   END;
  64.  *
  65.  * Fr Megamax-Modula-2:
  66.  * Die Prozedur wird nicht direkt vom AES angesprungen, sondern ber einen
  67.  * Assembler-Handler, der intern im Modul arbeitet.  Der Handler wechselt
  68.  * vor dem Aufruf der Zeichenroutine in den Usermodus (Das AES l„uft zu 
  69.  * diesem Zeitpunkt im Supervisor), so daž die Routine keinerlei Probleme
  70.  * haben sollte, und nach der Rckkehr aus DrawProc automatisch wieder in 
  71.  * den Supervisormodus. In der Routine k”nnen alle Register mit den bekannten
  72.  * Einschr„nkungen des MM2 verwendet werden.
  73.  *
  74.  * Fr TDI, SPC und LPR:
  75.  * Bis auf weiteres ist es leider nicht m”glich, richtige PROGDEF-Objekte zu
  76.  * benutzen.  Ein Dialog, der PROGDEFs benutzt, muž mit mtDials.DialDraw
  77.  * gezeichnet werden, um in den Genuss der PROGDEFs zu kommen!
  78.  *)
  79.  
  80. PROCEDURE InstUserdef (tree: ADDRESS; objc: sINTEGER;
  81.                        proc: DrawProc; private: ADDRESS): BOOLEAN;
  82. (* Installiert ein Userdef-Objekt. FALSE wenn fehlgeschlagen (bereits instal-
  83.  * liert, oder kein Speicher mehr fr die Struktur).
  84.  *
  85.  * tree =       Objektbaum
  86.  * objc =       Nummer des Objekts, fr das proc installiert wird
  87.  * proc =       Zeichenprozedur.
  88.  * private =    ein optionaler Parameter, z.B. ein Zeiger auf eigene Daten
  89.  *
  90.  * Der obSpec eines solchen Objekts wird ein Zeiger auf eine USERBLK-
  91.  * Struktur. Modulintern ist diese AES-Struktur erweitert:
  92.  *
  93.  * TYPE PtrUSERBLK = POINTER TO USERBLK;
  94.  *      USERBLK =    RECORD
  95.  *                    ubCode: PROC;     (* Handle-Prozedur *)
  96.  *                    ubPara: ADDRESS;  (* der originale obSpec *)
  97.  *                    obType: sINTEGER; (* der originale obType *)
  98.  *                    draw:   DrawProc; (* die eigentliche Zeichenprozedur *)
  99.  *                   END; 
  100.  *
  101.  * In ubPara wird der ursprngliche obSpec (siehe MagicAES.Objcspec) abgelegt,
  102.  * damit diese Daten nicht verlorengehen.
  103.  *)
  104.  
  105. PROCEDURE FreeUserdef (tree: ADDRESS; objc: sINTEGER);
  106. (* Gibt ein Userdef-Objekt wieder frei, dabei werden obSpec und obType
  107.  * restauriert.
  108.  *)
  109.  
  110. PROCEDURE GetObtype (tree: ADDRESS; objc: sINTEGER): sINTEGER;
  111. (* Liefert den obType eines Objekts. Erkennt, ob es sich um ein Userdef 
  112.  * handelt und liefert - falls es mit diesem Modul installiert wurde - 
  113.  * den originalen obType (der obType aus MagicAES.OBJECT wird ja mit 
  114.  * MagicAES.GPROGDEF berschrieben!)
  115.  *)
  116.  
  117. PROCEDURE GetObSpec (tree: ADDRESS; objc: sINTEGER): ADDRESS;
  118. (* Liefert den obSpec eines Objekts. Erkennt, ob es sich um ein Userdef
  119.  * handelt und liefert - falls es mit diesem Modul installiert wurde - 
  120.  * den originalen obSpec (der obSpec aus MagicAES.OBJECT wird ja mit 
  121.  * MagicAES.USERBLK berschrieben!)
  122.  *)
  123.  
  124. PROCEDURE GetPrivate (tree: ADDRESS; objc: sINTEGER): ADDRESS;
  125. (* Liefert den bei USERDEFs, die ber dieses Modul installiert wurden den
  126.  * 'private'-Parameter, oder NIL, falls kein USERDEF.
  127.  *)
  128.  
  129. PROCEDURE InitMtXobjects();
  130. (* Initialisiert die mtXobjects. Wird normalerweise im Modulk”rper
  131.  * aufgerufen, und braucht nicht weiter beachtet zu werden.
  132.  *)
  133. END mtXobjects.
  134.  
  135.